#
# Created by Administrator on 2021/7/28 AT 16:57.
#
# 给定一个32位整数 num，你可以将一个数位从0变为1。请编写一个程序，找出你能够获得的最长的一串1的长度。

class Solution:
    def reverseBits(self, num: int) -> int:
        # cur：当前位置为止连续1的个数，遇到0归零，遇到1加1
        # insert：在当前位置变成1，往前数连续1的最大个数，遇到0变为cur+1，遇到1加1
        # res:保存insert的最大值即可
        cur, insert, res = 0, 0, 1
        for i in range(32):
            if num & (1 << i):  # 从后往前 第i位是0 还是1
                cur += 1
                insert += 1  # 记录两段连续1连起来后的最大长度
            else:
                insert = cur + 1  # 随着遇到0，一段连续的1结束，insert变成这一段连续1长度+1
                cur = 0
            res = max(res, insert)  # 更新结果
        return res


if __name__ == '__main__':
    sol = Solution()
    print(sol.reverseBits(1775))
    print(sol.reverseBits(7))
